/** xxx整合脚本(UTF-8 with BOM)
  功能xxx
  WinKawaks模拟器暂停,即时存档读档,静音切换
  游聚平台连发,热键中断切换,静音切换
  
  By setycyas @2022-11-30
*/

/* 全局设置与库调用
*/ {
  ;** 全局设置
  #NoEnv
  #Warn
  #MaxThreadsPerHotkey 1
  SendMode Input
  SetWorkingDir %A_ScriptDir%

  ;** 调用库
  #Include ..\MyAhkModules\MyKey.ahk ;按键相关库,导出函数以MyKey_开头
  #Include ..\MyAhkModules\MyWinkawaks.ahk ;导入自定义的Winkawaks通用快捷键,用MyWinKawaks_setHotkeys()函数设置
  #Include ..\MyAhkModules\MyXZone.ahk ;导入自定义的游聚平台通用快捷键,用MyXZone_setHotkeys()函数设置
  #Include ..\MyAhkModules\MyFaceDetector.ahk ;方向检测,用MyFaceDetector_setup()函数设置
}

/* 全局量定义
*/ {
  
  ;** 枚举量,全体大写
  
  ;** 常量,全体大写
  global GAME_NAME := "游戏名称" ;用于在Gui中显示游戏名字
  global KEY_A := "d" ,KEY_B := "e" ;按键设置

  ;** 全局变量
  ;* 绑定到GuiControl的变量,以G开头
  global GexeTitle := "" ;游戏平台选择
  global GsbText := "" ;状态栏文本
  global GtestParam1 := 50, GtestParam2 := 80, GtestParam3 := 150 ;测试参数
  ;* 一般变量

} ;不缩进块

/* 自定义函数,除Gui设置,Gui响应和热键绑定专用函数以外
*/ {
  
  ;** 缩短MyKey模块的函数名称
  press(key, pressDuration := 100){ 
    return MyKey_press(key, pressDuration)
  }
  pressKeys(keys, delays, duration := 50){
    return MyKey_pressKeys(keys, delays, duration)
  }
  waitKeyUp(key, waitTime, waitDuration := 100){
    return MyKey_waitKeyUp(key, waitTime, waitDuration)
  }
  inputSkill(keys, delays){
    return MyKey_inputSkill(keys, delays)
  }
  autoFire(fireKey, autoFireKey, duration := 20, delay := 20){
    return MyKey_normalAutoFire(fireKey, autoFireKey, duration, delay)
  }

  ;** 游戏操作相关函数

}

/* 设置Gui与Gui响应
*/ {

  ;** 生成Gui
  
  ;生成选择游戏平台等初始设定的Gui
  configGui(){ 
    Gui, configUI:New, , 初始设置
    Gui, configUI:add, Text, ,选择游戏平台:
    Gui, configUI:add, ListBox, vGexeTitle Choose1, WinKawaks.exe|X-Zone.exe
    Gui, configUI:add, Button, gButtonConfigSubmit, 提交
    Gui, configUI:add, Button, xp+100 gButtonExit, 退出
    Gui, configUI:show, w200
  }    
  ;生成主Gui,exeTitle是热键设定时对应的ahk_exe的winTitle,一般在configUI的界面中选择的游戏平台
  mainGui(exeTitle) {
    Gui, mainUI:New, , % SubStr(exeTitle, 1, 1) . GAME_NAME
    Gui, mainUI:Add, Text, x+20 y+20, GtestParam1： ;
    Gui, mainUI:Add, Edit, xp+80 yp-3 W60 vGtestParam1, %GtestParam1% ;测试参数1
    Gui, mainUI:Add, Text, xp-80 yp+30, GtestParam2： ;
    Gui, mainUI:Add, Edit, xp+80 yp-3 W60 vGtestParam2, %GtestParam2% ;测试参数2
    Gui, mainUI:Add, Text, xp-80 yp+30, GtestParam3： ;
    Gui, mainUI:Add, Edit, xp+80 yp-3 W60 vGtestParam3, %GtestParam3% ;测试参数3
    Gui, mainUI:Add, Button, xp-80 yp+30 gButtonMainSubmit, 提交 ;提交,运行ButtonSubmit_()函数
    Gui, mainUI:Add, Button, xp+100 gButtonExit, 退出 ;结束app
    Gui, mainUI:Add, StatusBar, vGsbText ;状态栏并非默认,更新文本必须用:GuiControl, MainUI:Text, GsbText, 新文本 
    Gui, mainUI:+AlwaysOnTop
    Gui, mainUI:Show, x1085 y250
  }

  ;** Gui响应函数,以大写字母和组件类型开头
  ;提交初始设置
  ButtonConfigSubmit(ctrlHwnd, guiEvent, eventInfo){
    Gui, configUI:Submit, Hide
    Gui, configUI:Destroy
    mainGui(GexeTitle)
    setupHotkeys(GexeTitle)
  }
  ;提交主要设置
  ButtonMainSubmit(ctrlHwnd, guiEvent, eventInfo){
    Gui, mainUI:Submit, NoHide ; 保存用户输入后每个控件的数据,NoHide可以在提交数据后保持窗体显示
    MsgBox, You have submit your changes!
  }
  ;退出按钮
  ButtonExit(ctrlHwnd, guiEvent, eventInfo){
    ExitApp
  }

}

/* 设置快捷键的函数与快捷键响应函数
*/ {
  ;** 根据ahk_exe设置快捷键的函数
  setupHotkeys(exeTitle){
    local wTitle := "ahk_exe " . exeTitle
    MyFaceDetector_setup(exeTitle)
    switch (wTitle) {
      case "ahk_exe WinKawaks.exe": { ;模拟器WinKawaks
        MyWinKawaks_setHotkeys() ;WinKawaks通用热键
        Hotkey, IfWinActive, %wTitle%
        ;这里设置模拟器WinKawaks热键
        Hotkey, IfWinActive
      } case "ahk_exe X-Zone.exe": { ;游聚平台
        MyXZone_setHotkeys({"KeyA": "d", "autoFireKey": "w", "KeyAB": "p"}) ;游聚平台通用热键
        Hotkey, IfWinActive, %wTitle%
        ;这里设置游聚平台热键
        Hotkey, IfWinActive
      } 
    }
  }
  
  ;** 快捷键响应函数,以Key_按键命名
}

/* 定义结束,脚本开始
*/ 
configGui()
return
